home *** CD-ROM | disk | FTP | other *** search
/ BMUG PD-ROM B4 / PD-ROM B4.iso / Entertainment / Strategy / Robots / bot 1.0.1 / Tutorial / ASM / Zapper < prev    next >
Text File  |  1991-06-26  |  2KB  |  128 lines

  1. !
  2. ! Zapper
  3. !
  4. ! This bot recognizes when it takes damage, and it tries to run
  5. ! away when it gets hit.
  6. ! Its primary weapon is a standard gun.  However, it has a
  7. ! secondary laser which it fires at the corners of the arena,
  8. ! just in case any bots are lurking there.
  9. !
  10.  
  11. #DATA
  12.  
  13. EQU INCR    23
  14.  
  15. DEF DAMAGE
  16. DEF SCAN_AT
  17. DEF XX                  ! Destination coordinates
  18. DEF YY
  19. DEF GOX                 ! Prepared velocities for running away
  20. DEF GOY
  21. DEF TEMP
  22.  
  23. #CODE ASM
  24.  
  25.     JSR CALCPOS         ! Pick a point to go to
  26.     MUL 20, GOX         ! Prepare to accelerate an awful lot
  27.     MUL 20, GOY
  28. :INITIALIZE
  29.     MOV D0, DAMAGE      ! Remember current damage level
  30.  
  31. :SCANLOOP
  32.     CMP D0, DAMAGE      ! Have I been hit?
  33.     BNE RUNAWAY         !   If so, then run away.
  34.     ADD INCR, SCAN_AT
  35. :SCANLOCK
  36.     SCN SCAN_AT
  37.     CMP S0, 0
  38.     BEQ SCANLOOP
  39.     
  40.     MOV S1, R1          ! Set angle to target
  41.     FIR 1
  42.     JMP SCANLOCK
  43.     
  44. :RAWAY
  45.     JSR CALCVEL
  46.     MUL 2, GOX          ! Move there twice as fast.
  47.     MUL 2, GOY
  48. :RUNAWAY
  49.     VEL GOX, GOY
  50.    MOV XX, TEMP         ! Is XX-X0 > 30?  Then we're not there
  51.     SUB X0, TEMP        !   yet.  Otherwise, continue on.
  52.     CMP TEMP, 30
  53.     BGT RAWAY
  54.     NEG TEMP, TEMP      ! How about X0-XX?  If not, loop.
  55.     CMP TEMP, 30
  56.     BGT RAWAY
  57.    MOV YY, TEMP         ! YY-Y0 > 30?  Same thing.
  58.     SUB Y0, TEMP
  59.     CMP TEMP, 30
  60.     BGT RAWAY
  61.     NEG TEMP, TEMP      ! Y0-YY?  Last one...
  62.     CMP TEMP, 30
  63.     BGT RAWAY
  64.     
  65.     VEL 0, 0
  66.     
  67.     JSR CALCPOS         ! Pick a point to go to
  68.     MUL 20, GOX         ! Prepare to accelerate an awful lot
  69.     MUL 20, GOY
  70.     
  71. ! Before returning to the scan loop, Do a quick zap into the
  72. ! four corners of the arena.
  73.     
  74.     CMP A3, 0
  75.     BEQ INITIALIZE      ! If battery's destroyed
  76.     
  77.     MOV D0, DAMAGE
  78.     
  79.     NEG X0, R8          ! Use scratch registers
  80.     NEG Y0, R9
  81.     ATN R9, R8          ! Returns the proper angle in R0
  82.     MOV R0, R1
  83.     FIR 2
  84.     
  85.     CMP D0, DAMAGE
  86.     BNE RUNAWAY
  87.     
  88.     ADD 256, R8
  89.     ATN R9, R8
  90.     MOV R0, R1
  91.     FIR 2
  92.     
  93.     CMP D0, DAMAGE
  94.     BNE RUNAWAY
  95.     
  96.     ADD 256, R9
  97.     ATN R9, R8
  98.     MOV R0, R1
  99.     FIR 2
  100.     
  101.     CMP D0, DAMAGE
  102.     BNE RUNAWAY
  103.     
  104.     NEG X0, R8          ! This is faster than "SUB 256, R8"
  105.     ATN R9, R8
  106.     MOV R0, R1
  107.     FIR 2
  108.     
  109.     CMP D0, DAMAGE
  110.     BNE RUNAWAY
  111.     
  112.     JMP INITIALIZE      ! Start all over again.
  113.  
  114.  
  115. :CALCPOS
  116.     RND 215, XX
  117.     RND 215, YY
  118.     ADD 20, XX
  119.     ADD 20, YY
  120. :CALCVEL
  121.     MOV XX, GOX
  122.     SUB X0, GOX
  123.     MOV YY, GOY
  124.     SUB Y0, GOY
  125.     RET
  126.  
  127. #END
  128.